package demo2

import (
	"fmt"
)

/* demo1 */
// 车轮
type wheel struct {
	size int
}

// 引擎
type engine struct {
	power      int    // 功率
	enginetype string // 类型
}

// 车
type car struct {
	wheel
	engine
	member struct {
		amount int // 载客数
	}
}

// TestDemo217 初始化内嵌结构体： 结构体内嵌初始化时，将结构体内嵌的类型作为字段名像普通结构体一样进行初始化
func TestDemo217() {

	/* demo1: 初始化内嵌结构体 */
	// car := car{ // 类型名不能和变量名一致，会导致 car 变量的指向性错误
	car1 := car{
		// 初始化轮子
		wheel: wheel{
			size: 18,
		},
		// 初始化引擎
		engine: engine{
			enginetype: "1.4T",
			power:      143,
		},
	}

	// 打印结构体的 key, value
	fmt.Printf("%+v\n", car1)

	/* demo2: 初始化内嵌匿名结构体 */
	car2 := car{
		// 初始化轮子
		wheel: wheel{
			size: 18,
		},
		// 初始化引擎
		engine: engine{
			enginetype: "1.4T",
			power:      143,
		},
		member: struct {
			amount int
		}{
			amount: 6,
		},
	}

	fmt.Printf("%+v\n", car2)
	fmt.Println(car2)
}
